package cn.smxy.client;

import cn.smxy.dto.FamilyDto;
import cn.smxy.param.FamilyFuzzyParam;
import cn.smxy.param.FamilyIdsParam;
import cn.smxy.param.PageParam;
import cn.smxy.pojo.Category;
import cn.smxy.pojo.PlantFamily;
import cn.smxy.util.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@FeignClient(value = "category-service",path = "/category")
public interface CategoryClient {
    /**
     * 查询科属id的所有子集id集合接口
     * @param familyIdsParam 科属id集合
     * @return 科属id集合
     */
    @PostMapping("/family/list")
    List<Long> list(@RequestBody FamilyIdsParam familyIdsParam);

    /**
     * 添加种群
     * @param category 种群实体类
     * @return
     */
    @PostMapping("/add")
    R add(@RequestBody Category category);

    /**
     * 分页查看种群列表
     * @param pageParam
     * @return
     */
    @PostMapping("/page")
    R page(@RequestBody PageParam pageParam);

    /**
     * 修改种群
     * @param category
     * @return
     */
    @PutMapping("/update")
    R update(@RequestBody Category category);

    /**
     * 删除种群
     * @param categoryId
     * @return
     */
    @DeleteMapping("/remove/{categoryId}")
    R remove(@PathVariable Long categoryId);

    /**
     * 返回类群信息接口
     * @param categoryId
     * @return
     */
    @GetMapping("/info/{categoryId}")
    Category getInfo(@PathVariable Long categoryId);

    /**
     * 按条件分页查询科属接口
     * @param familyFuzzyParam 种群id 科属id 分页参数 模糊查询科属名
     * @return
     */
    @PostMapping("/family/fuzzy")
    R fuzzy(@RequestBody FamilyFuzzyParam familyFuzzyParam);

    /**
     * 返回科名列表接口
     * @param categoryId 种群id
     * @return
     */
    @GetMapping("/family/show/{categoryId}")
    R show(@PathVariable("categoryId") Long categoryId);

    /**
     * 查看种群列表接口
     *
     * @return
     */
    @GetMapping("/list")
    List<Category> list();

    /**
     * 删除科属接口
     *
     * @param familyId
     * @return
     */
    @DeleteMapping("/family/remove/{familyId}")
    R familyRemove(@PathVariable Long familyId);

    /**
     * 添加科名接口
     *
     * @param plantFamily 科属实体类
     * @return
     */
    @PostMapping("/family/add")
    R addFamily(@RequestBody PlantFamily plantFamily);

    /**
     * 添加属名接口
     *
     * @param plantFamily 科属实体类
     * @return
     */
    @PostMapping("/family/add/genus")
    R addGenus(@RequestBody PlantFamily plantFamily);

    /**
     * 返回属名列表接口
     *
     * @param familyId 科属id
     * @return
     */
    @GetMapping("/family/show/genus/{familyId}")
    R genusShow(@PathVariable("familyId") Long familyId);

    /**
     * 返回科属名称接口
     *
     * @param familyId
     * @return
     */
    @GetMapping("/family/full/{familyId}")
    FamilyDto full(@PathVariable Long familyId);
}
